本篇音樂分享
模組是將重複的功能(編碼)整理出來,當還有其他類別也需要時,"掛"上去,可以用include或extend。
include:將模組中的方法成為實體方法時使用。
extend:將模組中的方法成為類別方法時使用。
2.7.3 :020 > module One_module
2.7.3 :021 > def i_have_a_method
2.7.3 :022 > puts '我是模組喔'
2.7.3 :023 > end
2.7.3 :024 > end
=> :i_have_a_method
2.7.3 :029 > class One_class
2.7.3 :030 > include One_module
2.7.3 :031 > end
=> One_class
2.7.3 :032 > class Two_class
2.7.3 :033 > extend One_module
2.7.3 :034 > end
=> Two_class
2.7.3 :035 > One_class.i_have_a_method
NoMethodError (undefined method `i_have_a_method' for One_class:Class)
2.7.3 :036 > Two_class.i_have_a_method
我是模組喔
用extend掛模組時,模組內的方法成為類別方法。也表先出include掛載,類別不能使用。
2.7.3 :037 > one = One_class.new
=> #<One_class:0x00007fb5c531bc58>
2.7.3 :038 > one.i_have_a_method
我是模組喔
=> nil
須先實體化,include掛的模組中的方法才能使用。
補充:
2.7.3 :009 > new_arr = Array.new
=> []
2.7.3 :010 > new_arr2 = new_arr.new
NoMethodError (undefined method `new' for []:Array)
new給Array類別用.類別方法。
2.7.3 :011 > new_arr << 1
=> [1]
2.7.3 :012 > new_arr << 2
=> [1, 2]
2.7.3 :013 > new_arr << "三"
=> [1, 2, "三"]
2.7.3 :014 > Array << new_arr
NoMethodError (undefined method `<<' for Array:Class)
<< 這個方法是實體在用.所以是實體方法。
一個方法比較趨向實現一個邏輯。
一個模組集合一或多個方法,來達到一或多個功能。
套件與函式庫是一或多個模組組合成一個資料夾或特定格式的檔案,引入後(import, require)可使用。
Ruby中有許多函式庫,依造Gem格式來發佈,gem也可以視為套件。
(但有許多資料會把函式庫與套件分開說明。)
框架不是只是函式庫,框架很像是軟體設計圖,可以提供軟體基礎的功能,強大的框架可以給予軟體較完善的功能。
但請記得,我們要學框架怎麼用,而不是學怎麼製作框架。
題目連結:https://leetcode.com/problems/missing-number/
題目整理:給一個陣列,陣列中有n個數字且在0..n的範圍中,請找出缺失的數字。
例如[0, 2]這個陣列,有2個值,那就是找0..2與[0, 2]中缺的數字。進階項目請無視
整理
def missing_number(nums)
end
puts missing_number([3,0,1]) #=>2
puts missing_number([0,1]) #=>2
puts missing_number([9,6,4,2,3,5,7,0,1]) #=>8
puts missing_number([0]) #=>1
def missing_number(nums)
#n等於陣列長度
n = nums.length
#一個包含n個數字,且由0開始的陣列
new_nums = (0..n).to_a
#找兩個陣列中不一樣的地方,這邊如果是沒有array特殊語法的語言可能就要用查表或是迴圈處理。
new_nums - nums
end
簡化
def missing_number(nums)
(0..nums.size).to_a - nums
end
我在一開始遇到的問題是,兩個陣列相減
array1 - array2
應該要想成,第一個陣列與第二陣列相比,哪裡不一樣。
2.7.3 :001 > [1 ,3 ,5] - [2, 6, 7]
=> [1, 3, 5]
2.7.3 :002 > [1 ,3 ,5] - [1, 3]
=> [5]
2.7.3 :003 > [1 ,3 ,5] - [1, 3, 5, 7]
=> []
如果我沒偷懶,下一篇應該要講Rails了,但是我還沒想好怎麼介紹.....